From c028cc52b3ebdeabff5464071aad130c136e953b Mon Sep 17 00:00:00 2001 From: robertl Date: Tue, 2 Sep 2008 04:54:05 +0000 Subject: [PATCH] Support older humminbird tracks on read. --- humminbird.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/humminbird.c b/humminbird.c index 40273af17..012f372c6 100644 --- a/humminbird.c +++ b/humminbird.c @@ -441,6 +441,9 @@ humminbird_read_track_old(gbfile* fin) { gbint32 accum_east; gbint32 accum_north; double g_lat; + const int file_len = 8048; + const int name_len = 20; + char namebuf[name_len]; if (! gbfread(&th, 1, sizeof(th), fin)) @@ -457,7 +460,7 @@ humminbird_read_track_old(gbfile* fin) { // These files are always 8048 bytes long. Note that that's the value // of the second 16-bit word in the signature. - max_points = (8048 - sizeof(th)) / sizeof(humminbird_trk_point_old_t); + max_points = (file_len - (sizeof(th) + sizeof (gbuint32) + name_len)) / sizeof(humminbird_trk_point_old_t); if (th.num_points > max_points) fatal(MYNAME ": Too many track points! (%d)\n", th.num_points); @@ -475,7 +478,13 @@ humminbird_read_track_old(gbfile* fin) { trk = route_head_alloc(); track_add_head(trk); -// trk->rte_name = xstrndup(th.name, sizeof(th.name)); + /* The name is not in the header, but at the end of the file. + (The last 20 bytes.) */ + + gbfseek(fin, file_len-name_len, SEEK_SET); + gbfread(&namebuf, 1, name_len, fin); + trk->rte_name = xstrndup(namebuf, sizeof(namebuf)); + trk->rte_num = th.trk_num; /* We create one wpt for the info in the header */ -- 2.30.2